

import java.io.Serializable;
import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.concurrent.ArrayBlockingQueue;

public class Controlador implements Serializable{

//	/**
//	 * @param args
//	 */
//	public static void main(String[] args) {
//
//	}
	
	private static Integer numeroJogos = 0; 
	private static Controlador instancia = null;
	private static HashMap<Integer, Jogo> colecaoJogos;
	
	private Controlador(){}
	
	public static Controlador getInstancia(){
		if(instancia == null){
			instancia = new Controlador();
			colecaoJogos = new HashMap<Integer, Jogo>();
		}
		return instancia;
	}
	
	public String criarJogo(String nomeJogador){
		Jogo jogo;
		Jogador jogador2 = null;
		String retorno = "";
		
		/* Checa se existe jogo criado e se o jogador atual est�
		 * criando ou entrando em um jogo j� criado */
		if(colecaoJogos.containsKey(numeroJogos)){
			jogo = colecaoJogos.get(numeroJogos);
			jogador2 = new Jogador(nomeJogador);
			jogo.setJogador2(jogador2);
			colecaoJogos.put(numeroJogos, jogo);
			
			retorno = Constantes.CD_TELA_INICIAL_JOGO;
			// TODO - notificar o oponente tamb�m...
		} else {
			jogo = new Jogo(numeroJogos, nomeJogador);
			numeroJogos++;
			retorno = Constantes.CD_TELA_AGUARDE_OPONENTE;
		}
		return retorno;
	}
	// criando estiticamente as dimens�es
	
	public int [] ajustarCentro(int x, int y){
		//130, 200
		// int x = 130, y = 200;
		int inteiroX = 0, inteiroY = 0, restoX = 0, restoY = 0, novoXCenter, novoYCenter; 
		inteiroX = x / 40; //3
		inteiroY = y / 40; //5
		restoX = x % 40;
		restoY = y % 40;
			
		if (restoX != 0) {
			novoXCenter = inteiroX*40 + 20; 
		} else {
			novoXCenter = inteiroX*40 - 20;
		}
		
		if (restoY != 0) {
			novoYCenter = inteiroY*40 + 20;
		} else {
			novoYCenter = inteiroY*40 - 20;
		}
		int [] retorno = {novoXCenter, novoYCenter};
	
		return retorno;
		
	}
	
	public static boolean moverCasaPreta (int x, int y){
		boolean resposta = false;
		// receber o centro
		//voltando as bordas
		x = x - 20;
		y = y - 20;
		
		// chamar o metodo colecao de pecasPretas (posicaoPecaPreta) 
		ArrayList xyMisturado = posicaoReal(posicaoPecaPreta());
		ArrayList<Integer> colecaoX = (ArrayList)xyMisturado.get(0);
		ArrayList<Integer> colecaoY = (ArrayList)xyMisturado.get(1);
		
		for (int i = 0; i < colecaoX.size(); i++) {
			if (colecaoX.get(i) == x && colecaoY.get(i) == y) {
				resposta = true;
			}
		}
		System.out.println(resposta);
		return resposta;
	}
	
	public static String [] posicaoPecaPreta (){
		String [][] matriz = new String [8][8];	
		String [] posicaoPeca = new String [32];
		int numero = 0;
		
		for (int i = 0; i < matriz.length; i++) {
			for (int j = 0; j < matriz[0].length; j++) {
				if((i+j) % 2 == 0){
					posicaoPeca [numero] = i*40 + " " + j*40;
					numero = numero + 1;
				}
			}
		}
		System.out.println("passei por aqui");
		System.out.println(posicaoPeca[0] + " " + posicaoPeca[4]);
		return posicaoPeca;
	}
	
	public static String [] posicaoPecaPretaIJ (){
		String [][] matriz = new String [8][8];	
		String [] posicaoPeca = new String [32];
		int numero = 0;
		
		for (int i = 0; i < matriz.length; i++) {
			for (int j = 0; j < matriz[0].length; j++) {
				if((i+j) % 2 == 0){
					posicaoPeca [numero] = i + " " + j;
					numero = numero + 1;
				}
			}
		}
		return posicaoPeca;
	}
	
	public static ArrayList posicaoReal (String [] posicoes){
		
		ArrayList colecaoX = new ArrayList();
		ArrayList colecaoY = new ArrayList();
		String[] colecaoIJ = new String[2];
		
		for (int i = 0; i < posicoes.length; i++) {
			colecaoIJ = posicoes[i].split(" ");
			colecaoX.add(Integer.parseInt(colecaoIJ[0]));
			colecaoY.add(Integer.parseInt(colecaoIJ[1]));
		}
		ArrayList variavelAuxiliar = new ArrayList();
		variavelAuxiliar.add(colecaoX);
		variavelAuxiliar.add(colecaoY);
		
		return variavelAuxiliar;
	}
	
	public void moverPeca(){
	// separar as pecas de jogador 1 e jogador 2 (obtido pela quantidade de pecas de cada um. 
	//Um atraves de uma array credecente o outro decrescente)

		// armazenar esse estado inicial na classe jogador
		
		
	}
	
	
}
